<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Java网络编程概述 | Kylin</title><meta name="keywords" content="Java,网络编程,offer"><meta name="author" content="Kylin"><meta name="copyright" content="Kylin"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="有东西被加密了, 请输入密码查看.">
<meta property="og:type" content="article">
<meta property="og:title" content="Java网络编程概述">
<meta property="og:url" content="https://www.codekylin.cn/49809.html">
<meta property="og:site_name" content="Kylin">
<meta property="og:description" content="有东西被加密了, 请输入密码查看.">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://qiniu.codekylin.cn/img/20200418115059.jpg">
<meta property="article:published_time" content="2020-10-31T07:31:20.000Z">
<meta property="article:modified_time" content="2022-07-12T11:42:50.032Z">
<meta property="article:author" content="Kylin">
<meta property="article:tag" content="Java">
<meta property="article:tag" content="网络编程">
<meta property="article:tag" content="offer">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://qiniu.codekylin.cn/img/20200418115059.jpg"><link rel="shortcut icon" href="https://qiniu.codekylin.cn/img/20200807181548.png"><link rel="canonical" href="https://www.codekylin.cn/49809"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//www.google-analytics.com" crossorigin=""/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//fonts.googleapis.com" crossorigin=""/><meta name="google-site-verification" content="gzeyWstt6NoTZKh7YFYNLNziL8HIZ8YH2Ug7xTDX5-Y"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><script>var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?f76c34daefe747deee7c7be3ead2ba80";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script><script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-159334016-1"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-159334016-1');
</script><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium+Web" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/',
  algolia: undefined,
  localSearch: {"path":"search.xml","languages":{"hits_empty":"找不到您查询的内容：${query}"}},
  translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"简"},
  noticeOutdate: {"limitDay":90,"position":"top","messagePrev":"自上次更新以来已经","messageNext":"天，文章的内容可能已过时或存在差异。"},
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '天',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: {"limitCount":50000,"languages":{"author":"作者: Kylin","link":"链接: ","source":"来源: Kylin","info":"著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。"}},
  lightbox: 'fancybox',
  Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#FF0000","bgDark":"#2d3035","position":"bottom-left"},
  source: {
    jQuery: 'https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js',
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
    },
    fancybox: {
      js: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js',
      css: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: true,
  isanchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = { 
  isPost: true,
  isHome: false,
  isHighlightShrink: false,
  isToc: true,
  postUpdate: '2022-07-12 19:42:50'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
          const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
          const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
          const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified

          if (t === undefined) {
            if (isLightMode) activateLightMode()
            else if (isDarkMode) activateDarkMode()
            else if (isNotSpecified || hasNoSupport) {
              const now = new Date()
              const hour = now.getHours()
              const isNight = hour <= 6 || hour >= 18
              isNight ? activateDarkMode() : activateLightMode()
            }
            window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
              if (saveToLocal.get('theme') === undefined) {
                e.matches ? activateDarkMode() : activateLightMode()
              }
            })
          } else if (t === 'light') activateLightMode()
          else activateDarkMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const fontSizeVal = saveToLocal.get('global-font-size')
    if (fontSizeVal !== undefined) {
      document.documentElement.style.setProperty('--global-font-size', fontSizeVal + 'px')
    }
    })(window)</script><link rel="stylesheet" href="https://qiniu.codekylin.cn/github/img/img/custom.css"><link rel="stylesheet" href="//at.alicdn.com/t/font_1993646_z05rabxf05h.css"><link rel="stylesheet" href="https://qiniu.codekylin.cn/github/img/img/icon.css"><meta name="generator" content="Hexo 5.4.0"><link rel="alternate" href="/atom.xml" title="Kylin" type="application/atom+xml">
</head><body><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="author-avatar"><img class="avatar-img" data-lazy-src="https://qiniu.codekylin.cn/img/20200807181526.jpg" onerror="onerror=null;src='https://qiniu.codekylin.cn/github/img/friend_404.gif'" alt="avatar"/></div><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/archives/"><div class="headline">文章</div><div class="length-num">362</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/tags/"><div class="headline">标签</div><div class="length-num">427</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/categories/"><div class="headline">分类</div><div class="length-num">101</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fa fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg" id="page-header" style="background-image: url('https://qiniu.codekylin.cn/img/20200418115059.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">Kylin</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fa fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="post-info"><h1 class="post-title">Java网络编程概述</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2020-10-31T07:31:20.000Z" title="发表于 2020-10-31 15:31:20">2020-10-31</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2022-07-12T11:42:50.032Z" title="更新于 2022-07-12 19:42:50">2022-07-12</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/Java/">Java</a><i class="fas fa-angle-right post-meta-separator"></i><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/Java/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a><i class="fas fa-angle-right post-meta-separator"></i><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/Java/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/%E5%9F%BA%E7%A1%80/">基础</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-wordcount"><i class="far fa-file-word fa-fw post-meta-icon"></i><span class="post-meta-label">字数总计:</span><span class="word-count">9</span><span class="post-meta-separator">|</span><i class="far fa-clock fa-fw post-meta-icon"></i><span class="post-meta-label">阅读时长:</span><span>1分钟</span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content" id="article-container"><div id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."><div class="hbe-input-container"><input type="password" id="hbePass" placeholder="您好, 这里需要密码." /><label>您好, 这里需要密码.</label><div class="bottom-line"></div></div><script id="hbeData" type="hbeData" data-hmacdigest="89849a047c369ad86b4e1e0dcca6bce9b16b55d09fd2c9e479121514281eaea2">a1740b908511e1bd67328d04121dd7798fb2e04b2bd5ded41dca65011f82969d8b0d28e2b9a7fb4f9f65ff1a58db3e7ad3d1b0bf50383d8642ecf72840ae3783fdc42ee2a410381bc3a810977c2cea872b3ef7f2f9abd6c8b6fe039a8372488dd36e2086e9f1949624ada349b296eaf87cd3954336574e20d74f291145015583d1eb3dd5e8a8ad936721ac544b43659a271a49764d4f59a6989b93e39c4b9383f760866572399b1b7c040f319888a4fdafa9b89fb3ec31b7a55cab3f49b371b7b36852cd23fefde63e408a028a4bdbae76028a67e39f70444dd2faaa9257a11b2106f7bc056c3137143919368f9e2e3f610fed648f4d4390282c0b87013842fba588139a21b24ddbb747044c19b3bc4ba474465defc7e817947dca7aa85cb69e5bbdff76518ed403a9363c910d672e6070449e19629bea4b6982fb7ed704e1a1c3c39441b6ae18285ffc73491b3285dca7418b6a65251993af7feb9fb1e4263207cfa4f3c409945b735f64f33b5b8374cb78cb343f7a2b45356b8d319bc5390d79ba059cd714f6beb7867c8547e5ae732a4339579be08519d36c15a7d938a785376f147789ac4f37c21d34df122eedabcdfd2f6cbd01566b15216e459057b11333b6fa5c7cf8fcc36ff5cb061d39d6a01c0b58f83dc1ccde0ae62e014eacee6f726abed254e572d12d33d9613e7c4da47ce95dcc09fa7a8aacfc5a6cb39c7143ab2c4ca6d5a75eafd43362c48d39934d7fb1682933ce0ec727fff5d8b8021113e710d17691955a45c8914a749a8184ee684170f125b4b9c8b75d1d8a075cc6629e90a54dcfb8ca963dde16c66d884e5ede0f64d2732e01f95f02abbfa86b1c7b015ad1b3a4c612ae04f41429e68888ac78f9743952b06a09306de9f7e52c318af4957efaa1105fea2880883e9ec534f93eaeedb98b86a2ac274cf557d649f3c214528b8e9fcfebb96f0bdafddc3b3e795b02157773fd5ee3ed2922a58c6dcb281f8ef65c0f4cdb200c5b181606a3511e7aeba7bccd3fd594a3bf1402bd4acf86b5441af7cdf1f0d6b1f052e856b38dc973d5d773ca606271a568b24bb766989f00b56f6f0de6d15200c988efcacf2ea5f704f3baca4085971773337d5779bd9059f90fd47baa22bd2ee649db2269b20c3ec8ad878012c716bdcb7315f3389efca3e9c261d36f35fb195048641c994249caa8a7a275b3bf09e68eee8dcc427d13e78ff44eea01190d1622212ce10503bf0588085092da52169e99a600c596b0be4afc0a22256ddb54b4b8747bf2583ac27cf82dc543d3c8c85dbb9682bbddae4183c947ad216ed08494e3a8cc69a997e6e7a1acf28b7effe2aaaee0c6373de00f05cf60ac01b1a66f582721c41a0744cb953a1603b5ea2a2b82ec948e39a5009ba4e6fce04655eb3c4dda27156a5f35f56fadc1040d1ac869f6c6a6297f937d6d04380bdf5352a23cc78828903e332046dbf7c8d589e10815306d871681484a217919d1e2d7aba734a338cb5ebab419e3c6db9a1c1f452b182386d0598bfb03f2a2e79e866bf2b1f26620f7424386a52752fd1a3124019e5962be7937b24c8ed1c13afb37ada02bc74f25aa4e606262e948e65466be9ef2cd61a83c8dedf04b6510aa08d66b329164bd54c6e6ab1cd794ce0e12eece712273b3b20b21034d4684d513cff3fe95b43b3553b2c4cb38d6a6accd64d9581c924a38b1057d5a218a50ddd228b82c3bee87796b4efa67089c4d42436b0090dd5e6e437a3987ccb033dc7482039492ced9589b0f6c5abb4f892c2b824d16a01b5d23abe4ad055a4b958981f5bf5766455c2a52dccff0df14df8ec42cb1ffe15a6b29a0d6dca253bfe1ad7ed80ee853269663935bee257b916899d17ed3ed2ed79c79c099e570d9bc0b92d100fdcb6391355eac719c70db1835907881dd449bca4879f3d0e0938a70ef9eb4d5c3e4adae24698b125bb3516af39ae6cdaf89c8a26e764554c6acffdbac555e4a92127e37b1eb4600236222ab0df77ae65125c72fbe27dd4a6de13452b006cd9776faffb4ce0f7e44350899b9c7c89582c9ddcbbc545819b8fcff20ad12535fc6bddb79d91a3928b917c0a30073dca61b7b3d684af8cf6aaefb1a598b1c3f4a7a66ff59b3b5fa2af7ba031ac182e1820e116ad18afea5312bd3a8b0bc965970c0a97f512f2055a9f6e31d2c8f42f5d0e1b64874fb54eea739f8440f2c2a398c6273a231f75a18fc0bba6cab8e92e64c8e92c8128a8f1c677b1524f0b92c3fdcb4fee32f26e7154d2c859952e011d6a6f26dd4b8dc69c8923396cbbc5c9d62f3d22612a2325f9de419d5ee9cd27fa0d305d1b6be424cc5b200b57ec8a84541ebf7768e4d63d61951de55facd9635bdc0d22e9eb4a6cae4d5d143d7780a6f9acb11379f17d323ad49c15a202074cfbf8a2ddfef05f8993bde570774ce6a0444666a5de1f97772492f3c31d8b2232ea12c2e0ff1c71ab8ef9a8f19641bc4be698cfc1c75689e7df8a10e07932016eb76f2386ac13fe01847663c519c206d4d37a4e9c79c04fdb372fe7af79d72eb414f1db384b4f8d01517afa9bb0ce6aa9fba932a2b7b3396117800a16a319fab1190c188468477af9031330679a27e1e04274bf921712c2da947e141785643fa4dd78af4069c8fab31e542edfda86dbb95e69e3f5f3e8e52041496b9a9b52f6a0fc0dd9a87f6c4fa83eaffb4470fa842d65e71a6a789387e74e33c57decc756eed40260cf913f97e34bc83a14968732432bf409d274a29272b8bf76149a1d3b7b55d8c321352fa6b3541eec7a5468491bad64579e190cb97bc9a1da874f56b4980ef501598b234096bc0b0718bdeb18f60d519a980d3fd7d123a138b05f1ba5a3bf656bf45dea90378972ad3c305182f06828648d33c0201450cd423c8118e6e43a5559d566ba2f0a138faf33128a57c8d93c4da2429f929dd27acf5e4c7b9df753b2c576975bfa0f018bd4626e3866afb9fb1cf30ae8544b29f56790b8ef8fc545fe466ae40d554165f1f39df5aed6ba7a325b3c829bb066a334211c1634ca885d10646f373d88930e51849873fa7dd85ee98580929d83736078d529377f407c171a9ac953b68b0e8f5e78176f090a3e94215cc7065fdda0774283f096f4ab5e046084c72647a20d43e1020a2ed7eeff17b1d3cd8b015f030ab7321750f36b6186faa80e8732528fb0ae4a0cfc41159c399ed84673628414a139a13316648b205e7f435a807ce2c57f4bad6f1362e3a0519b097152e2afec25812b7d94f0cb873b47b255592478a25754e62d2af9fed9b3b4b210e846d072aba346d3cfffd74bf3bad8b2908e093a0e00623fbc9fce4d9c5904fc4c92c9360e3fce3fc81ccf14f5788f8b446c79a8669715fa4fd64b0de19e1b26943d47c1f0926dbd95ebd105001b56db32d1ad009f1fcbdc8da37880eecc8ee112618880ada67c50b2f9bcec732996ca868ac9fcd6126b8d8a72e477071d8d01e5a1f954ef23ab4144c0e5436dc3bcbe798b2fe47dbc4ccf96c36bd7b9b3a7372afd564195278dded2dc7c984c7464913a198db5c46cbfe639d7cf14368719f0d916571a1cb22b1840b02af4e747d9deb9e217a2e7e6befc2c8852aa09fdd0763ac364cda32ae5921238b2829773e6c18b0f293df13c24f91180f2682f512e6342f9a3dbb844f079727b8fd52e508bf6121be4fc56f525352fc0a40f53aaac828790b78cadbfa0ef30a9d2fc642c608bb1f5fbc5bb444c04417ead83c62bb5bfaf8f287842bc08cebb47b22e33c212f17bd41bb69e269907f4ff34491290b8d6cd5f9b0420d209f078cca26ecb223d4e790e277ae13925dc844c6f0b53cbc264639cf252cdd71f601f8f1e1ba17d165db7e88b28d646f023344056981e2aeeb5ec494425a0946f5c7fd0f58be5ec2fb855ade63c0042878371e3a30d7b58ae980cf16b50fe9b166608567cfe810233c790e16d4d5870cbfc195db3d7a95813fb222fd771e4a11c44116f212408d63b62e078bfddc45d0b974da4beb49eaa0b0f029fdcc605951f57c4a1ee2391862cd8207d52e3a053389520298e443cb31f308609eccdeaf8be138e03641db5910c69ba2b8a54b662ad91408c080ee5e40475f24e7cb12b2a89aecc81a8fa870e15b882a08c1e83cc5d881dc43b1cd2724adb3a1fff16a951f4b202b7342c42a904263f7fb1a2e5c47de375da997d23288d1bca30bcf634115bc40d04c9cda43f7a240e3a99c2b0acdea99919876caefbbaeabedd2087075888584fca0538a924a91fe699893ac6f4f9ec5af74b2a693f9fd365c7e8e4d632548af182d82bb76d2f8933d63b2f0d383acf06d545f6142039653539978ffdb909c35ee0eb74c39ac45371f64a7658cad458078f0376e267e1cb3f8036221a5463bb8415716fa2c4753e8baf2ff7165a002dc7a3ca941153ab6c2b5e0ca4dc518c8e564d7245936a805b169794304fd6e0a73420090ed0fbf821610a3bd2ec844f741e5ae572bd77527cd1c5b5fe69645a6c29966ec7bfb1e32fb291e9230c0dd89df90cec79e1a8e4697c7eebd652619369475ef3407a911c8bc72d152b53b0f1d6d1d568f48cb02572233b2ef7165dcdb3bd96eb97b95095e211ea015021dbe884396b42a064c8931128989ccdfe4e3c798b1bac677ec9209d133b0a72e8224c84613be3ee27324b5f8dd2e7b5303ed691e62436e4ec2908af71e1c67502fdb78f219993025dfafe4dd43cca4ab12906810a7b13ef17b1643dc5adb2d1a84c9af84efdce836f1bdc9bc21e8d0b70d76142104133706221fffb7f25f3a990dca7dc349a6f07ccb58792c9cd8cc8613fa73f78b0169a6061b79d3d17ab158c92d1acc55b3379230e2914f003a70e2f9fe799f78f1d7895796060ffc2768c179becde421c2ba39d8c19a98e4f64e28ee2ff0061a20654ddcffe6d22d994cdcaf96b3d4de8b97aa8e80088da2760086c25e0d32950586ebe25154c1d2796bb021209b663c28725a22d838e0b3a832aa2e471f781653e7181e2f5a70f2db37c5da509314ba6670b7d80ea4cce39edf4b21b9e44076a5c442a885eb78c6c8b320f86a2e2b620070ba88a81b34b98127212f98e3c10a1a01fa3ddbf8aa53077148a17ada28b4bf761033b1f6baba9fa3249668b5e2d5de813847f16c309b6ecd13a680b6113b223b5aab741cecefb5e2095f9ad38daaab9bccbba129c18ea8948c6a0d75de7fc38d2fe04e0486870fe76650a5b1a0eee3f52b6f61aebac17ffa212b8c4e3dcdfb8836729bf64b6672445bb7d8309a48f9c1191d1296202a5e9bd7f71693e20897c43ef88ed4289ffdf419b023ca5fef50244a3b0897bffc916ab94586bc2cc2ad0d802ff91394afc7c63780415ebe435546ef311da1481c17e69ae4caa56001f13bca38354982232d783b0b8c06b02efa7c438ca03896eff7e99c257a9eb1b6e72bcbd9d29b575e0572d0449d21d2a690948fbde817bff594e85bebc4ab04b9be4a8b5bf6a1673e55a0b19682cef8726088adaabbde54afd971dc6d59311df8b35aba99e621af54b8b7ca5353e7f02f0ae517ba855e9e4ae4c055b9f5752217d1766d73d70b744769a4cd76da61771ca93c36d06527dc2a699df37b25e7cbf45e4298a1f024713bcf716d7beab601c139033bb1d7f1ace6982b3be7b7287776fb28ceee5662105c3a528cc88b82b65f3e55d353d6a62c4b9fe7451caf90651f0ac2542a01bc10008c46aa8fefbbe485840abe443a25ff06cae2773dbea9975c98d4c3facbeeda5f9bd1a46c46b2b44d31206741c73dc90cfb0af983f95b78a2c811223a6d57d6c91f54d2e4d30ccd54bc0c02beac37e944e1ff6007df64869663f9e299ee25612f2b2229f53554b871a77dd3e3b3c48edf31aefcc709dc72a282a53dc08dd65de7f564467757224248e35c8422dd527ee602eb37e8aa3e1f9bd993b5ae0cb46983449881699593dd1d564c42f3bfe16db565f3d82300547a90d1e08b9300f93177a5a4c34d4a6d69b5b982bd9f80068e6952cf8b2c82d71b3bd153c817c98da3f1fdfa442c7f825309b06d91184a2024968bf614a4e0125fb137698262c70ed1a6daf307c2edab1c54511b53d62efd45bcd458fecae871ad121ff96a8cdf80bf097c634e5ab560c521669e613f69e7f626bdde20bbae12ecc5615cc8726a045372f396358076270f5607b4514522db9afac5d5cffb9f74ebdcdd0bb1c3a436475349bc48bdab3ce4fd6b0a7a2b70517b5c65084974ad128ac08d027f755bdd74c0d0867a3c534deeb33aa76aefc85cff5c0ef7c0caa1800ca6327c7a87dd7e89e09de7702a7257074d8b8a3e22faa082a2bb9429a8bbb69ca1e5fcb745960fe89e8d10ffe1edf8863d4c27cbd01fa226aaff644f92ccdad46333002b6a06250308efe0f8069af62fd5e7b60b0d3b80e7b31273d6eb07a3d289a221c23809666c3c0e4170bd237831add98bd20e9280bf021dc2f87ffb4573c228cc8f37fc21763efa82c181513b57d4a2f4877192cbc5eaeaf5dfd70edc3eca28bf8c240e3abdcad0e8ed82c7b5fa5a799c782fc47984e9eaee707e761fcdafdff38c7c4fe17187428789bffd4bc5bcf5d472b0bfa460e7bf26ef49182151d5015b3a148117f2e24024399a850cc55bdf58cced7cc249b189d1a1aaa42b722bde08febcdbc156220732d82dab5b87c188816cf8cb4f98b83bdf52afe6dfc167db12dcd5c33e03b4049df7dcda0fcd9b31400f0a0587b51d97422fc2a06d498ae08091f008a28650cbd8da6bb98099d03b8decbb1126c799c8abb44cf517be7e0a2c5ac06f00f892d468c969590251a636698ec690303ce2874c65353cb8c165a4c8bb15861c2e44e62d4e4163b399f41d3ff32e843fc801b00d5c9569be708a3062ea6ebe1bc9a3749f43753b1b4147ff42ebf138ed590f22367fe997c9fe5a3499d802c5ff0888447c19f0b2423fd057506d725e01618800b704f4fe722ef11f9bceaab0e6ff4a2b04fcccd2f8849813a4bea91689bbeccac728b74eee584a1872928024551e2693d29ed757464e5240ecea5458327ba65a793c8ad8685ab92b549b717f3f512cbcb23e6345a2e42cdfb09541620bfb2b967c21a24976273b89aa778310d5277899dcdd0f8e1878c88358e7d3fff503c5be6ee2a10358f2cc4ce14002777ba510fd8844e0c5f0b390e58dba03ea54e7ac28a324055d993087bcb28be65a57ca3375e6870dd5d679088ba6b06e35a8272f4727eb3784f4d5c5963ebfa3cb9b4b03eb350f12f97c8385f4045cb46706e58740637f47f7ac2c3fbb2cdbbbdb8e381a4dd4b703df8392884f12de35fa91d6d8fd87d9f70a33072b7c455f9d4cdc79700468a24c2aba9adfb487087257a24dac374f54057fc956b70084c0a364e860381638c03ddeddddad331934e71a742c6ea48ba3ddc0033446955036ec25e7aa0704039641e6f301bd02e94cdcb49a6cf234a3688e073c3f4c546dcb2d43df6941b48418027b57edc2a3a09f0251581d04c5c4f8b38eebe5a0f9099762b103870aff1e22cbf39e62915a048970d7f63131a3d55326dc1b9cdf582b2839c2f8d416b3f4fc2f4b127d933643198ae000fa42965239d05f56e0b920602a69da59ed12f1e247b3fa3b6959b1c38f82bb589a0e2bb3d14717ffdc07fae763207a465453f76dd8e3f462b1d53bf77d199be50815a08bdfc89a4ecf4d45dbebd82af1255f681655d05175fb1643da2694b2365f7025f7790c3cd2c167d67a2e613ed9abc4c42289b48082282057ba718d5dcfc1e7c0265ce39088c5a4a7adb371a38c3e6f0654bdace67b0a4984e50400756b9a951ccda4c310f2469f1d6799f7b8c8d337f08b059105afdf56c9fea9f0b47f09bf9b97af5619067571f7da4692d63403f79157ab5a08b1fae05655ec8654c4c8aa88843eef95c48656ce901f9ddc02898b38195bf92dcf92c7568475792925fec48a740c244904399db3600673ace1da7673ec11ef83115c7d5ed9621b1cbc5fa39dae6c9cad42778d37af465d7107392276769b0d2b9601308282284ad9f3001768cfedf9dae578e03f6f3120d094ec4ea5f86ac54ac0ec4a8f632edaaa94c43d9460ee5cb5844849b3e9e933ffd5bcaca8f06c803d4faeb9981aebca76a6d83799f998cf748683d472e03cac54baa201e675e592f95c337e38fd638f6f278ed2693f6bd434f88dda08f326be9fe1b2e73c5016e523b5e7aa53860136da8c191b8ad5aed605bc74d94ea5cc7dbb1c4b12f298e26b2690115b1dbd641d9b88b3dd7fb58d9d4ec66a4cf7c0cae955d42880052f99f1bfe3694759b7c57f48d99e803c221cceb8285049dfa98f6193c445a481e6778997dbde5514c934f66348233d5fcbc15a587daa824b553b84a0ad7279121e64df73be54a24a5c9285be7a73f00897186f9b7c487e3c58ba508f33d309eed3da2e772359b65d9aa2e75dba6fe67735ce6a1c8ad60c13d92990a4dfd7e8e70121d186b4ff0fc3cbd22ff0bae74d4897449085c663a63d607094946a30f533d412f1e978b23aab8dfd0d88ce899b9b55eae9730c164dbe698066c7446e97490d82ba2d2fa486620012907425aaa0a7f7dc8e42362d9eed5fa9080fc71ac949eeccc1b19582497b901db8d12e0cb73f731a7b33f403734097e89207fd263242fa8d65a1c76abf40f75b3778c7f6bb09b6ddd4d609060839381225ffc56a33ad121a8677791f515f901f35f9ac55356fecb65648976d2073da3d6dfd2f280e0fdcaed45488b313684151bbbd9622f2e534f9b653ce1185bc2e27c5c64a197407eea04f69ac0207ade1c50e1403f8f4bfba1ef07612c8354714a5bd843717e3d8e77f9fc9c6266fa869ad102db123ebd6e80b58833378115e0b80948b0bd6ae68ed2906c8735614e6a590d6ee3d39788ec67358d422387003979a1f0bf31073c2e1cf0f2426a7add6c8e387b54219404a4fb6d5f29b631ec5aa6ae86cbf26c7431f3b7a795801db18079e8fdb9aad7cdbab6fe61ad3f7662259f2ffd65b7f8e617ab51acdb8d12c850e2f75888d401a1cb3ee4e655092b47c2abbb26c6ed294daf50660d4b7013fa4591e065e44b46775a2632678eb765fca032ece5e4562564fd96bf737dd585b0c9b8d19bbd0f7e480f1c47650e5b52629af51d61007a5834ee13a5fef029c3ec1ac5a49ccfd50563fea16825b0fb86afbddcad6b9676847ed06c64fd12608be6a908a5172879304b190eec2b39d0fe1903601009bb9904c5f845947daad3d110d80ae67607ccb48d4a8da97239a5baf06f66222c0fe428fa7336f4355fa794aea233f3714c8dbd25d5476ea84130d0dd57c1d33e35b2eb1ae924cd4206e6e40b2fa13e841271d2a1e339f6ae4cf29b9550e95b92f7ef8c355345f5e865456e910c6bcb1e45231f5a47e42123d6a55464d9a1656b93599ed6939c4bbe563554e49aa790cdbfad2f84e1e22f62b1b477627a622eb94bd6307019dd8ddef77db738994d8f9d15d1a7e8b539d7aeaf5271992287e9b96d1b400210ce5379148be5e89b53f5bc606e0fb254e36c34ff60d8d422b38825dcf80532c1706fc216000755761db95f1684fccf5af75c23bd41d7fffb574e28d81389a37f4c4c3c7a013c6588d5b552fdf530055e1eea59182560b50d66cf4cb507c1f64700bd56ebb44931952a26e7a480e3daea5f51cf45d8f230564f3fe0cd9f27ac112334053bd4a5534a66e9e1439312974a59141b98c712904edc9afb9a6d9e0b40a47217fadfb5cc1f3c2c85057b9046384df9ddc89eaddefd8173a5cb3648d28d2668938d8326cda7c80d48c02eada82a04d9f6747514e97140980af2afada19e695a2069256779af506efc0ff5b51a5e34a29b86c2f71753390f08aca9ec9bb64e7092ce4ea585d1f1cea7c55a726c1b1d4e4bbf7bf06bf66fa8944a89a4d02ddf51f76e1d7568494d2d79c2bd12fae89f6c04cb1f3102c4e3d2126cfe72e3e733750bcd652f5d01c5f2b49a7aa05c6487f89e39ba6c90ce5b56ce3729641d54070ae6a60d8bd7ef5ccf624e68415b2af0f0a4eee045a90feab0ae3726f585cbc3fbe809a76aa2e66d276d3ed74930af658892a485e49bf53fcb240766695914fc78c2f1d75e935ab295157786fd0cbdaee50c0fcfd5115c6b570e81c7bbd7e3743d56608ff5b866401bacb96fd365b851c46d293178d27fd1f080066e9bd5cdc3f374e194cdb52ac69e07843049ecf695f3255f418c64a40fc57945b016fde399bd0a93fa78903f2a40d2bcd5b0e88925e166c58bcd0e352d3458bc8f913e0ba92eeb11bdf8af5df762ffaba7e1c96ff3ecab0f6f17b2bd8f335673e9406ccf366c30c0c864435b0be97248118dd4b57a65a105dc41d8bb0e1bc78e5ff00892b0c3502cf766bbeddf75ff6a832d932b46201566257380fbd6d7434d3b47e4e77d96f5e95cab71c4a6306b5c3960159806df8a5738df86f95ac51c2a325413b7bdaa376a2aee0d0624643f6af92dd84ac2f05bb82394f94d6783b57a4774100db5bde510ec783ae34f976ef90c62896ed5f98b0aabf5f21022554e34e109da979607ae0d6465e4e3d47c89f17475cac1f006c6ce139c676e04a9b75fc877b608ade5b7106ca76fafde6a7344642d44e1451bfeff516c49b6acdafad741e859b002dbee4ad8f2454d144a7cfd0321e9a9b2c506c537923cbabab9bf3e6ad4cf108cd2d9781823ca183d789fe01ba1205f301bb46574c8ac085af2beb17629aacb99a1b6dd0ab1a59b0bdc239c91ea8bad17702c78f1955fdc4447140202f3576e1cd4c443644f2cc13625bee829efab329dff9a1ac1cdd1a815a3e3cb7dc85190edb99e29c5b06cdbb8774732773ae16569acc79bb7bba07e0507a7c364b062c04f9e6f7f122d5b7a7a8f8e2afab036dbaa939a7abdfff026de094df00905a64e1df8e5205d875dd5cdacf8709c0779b38b27ecf8e471d18a04f5d2ca9bd07e23747f8fdbead943e3037bdefe2cc4c7f5ca8351ce34e950d1e1752b94e793d042e7bdca7c7475b6c7ea999e1e509b8461694aa9219e588ea98092ea3e6eac66887b922dfaeb71fd9ae53271f464c0ae427853667db9d21eaf710e922409f8707c28f5a08301104bf0460682db4f7010d12bfed386307ba52b991669e75fe5ccd578598949d007aef52f19def973c5a5b4618f076c45cf04165f3a2d54beb0a62d8280abc5222082368784b26bf922ce46de50800e77e823405af3772bebae73ac46bb2eca91fb891e760176d0ad409b11414a7ac50c22e2e340bc4d324069fdc26a754e1e6f3950903dc062ea8953e894b1209d37e92327039c84908fb8d5bb6c43e03a844f5f009aa87cd8478261dbb9ca8d661a0a6efca7a966f9ba51dba5ebd99677526f13ea824f707d2ca0a02d53dc71dce306c37bc17df8427aba1d1db5e8968b8ea9117e258153210e81eb1e2f66a98cc23ca40fa426af697b63e7a7a5946b7f7a40e087285f093f01c6babc46181f03a1384916349d1adf1fc88959e0caafc2d6a96485dca128de5fc98eccd3df2ee653841b59af0943d03deed767e60a595965e626f98ebee69403b04f8051728c43a7d0644ee99b56858f528acf58ab1c491bb5acd4c81703a37665d52d0734b5fe6194ed8687b74d74f493eecf6ed8a04700a9ffc9c130d19ff1030ebbcb53db2ac2a1b830daff8061e02d992c8d22f459bd61b5676c14a1f62484f18de319fc9249d14f8549c67a654f89e969dca5766ade1ce97f21cfa35c04abc64a6dec2a25c5e382be3b99118dd08eab5bf2186b9c94dd1fcffe4564d98f076bd5863e1911aa80b16dfb24797372f4a2462f8ffae01298b84eb66a006a8a13e3bbdb2cf86f3b042b4b4c9554ac125f8e01a93593d8d59294f025d502c0b87db5ec7fd8389527879fc7e9b9b488dc9d3a1f90f4e0702b879d7187fbb16982eb59d9356541b2d6976b5465a582987d2ae8d4a78ed1b36f3acb455257c2620347f70b95f6a8f237a6dcf956e7d412d53d56b0ab63eef29ffc8b1cb03969bcc19e1031f160ac7c47097c17b70db260abc974ec7d4bfcc8022d5d0125c18676ead00279c9a8c11ace2b3189a3cb4f662dc6e8a4fc37535d684ee334e2ba3057c0b460162342df5849fbcd0ed36407c283fd2bdbdd5eba9cd33851464f9c4c2190954d647c7defbd69c3c0c49be713a4147ee705987a4cc925f2d51a5104f5b5d4edeeeff37ad6961a03fec48f99bf34655a48c6ac46b1fc22158a724136075059229382a5bd7ed86f87170ba557ad37d359b6bbe86db982797c0165bc072eb0c0b2fa1385a707537e1180a07865493151ff90f4b855a5e1ad2ff74195d265c429f38d6d501f48fe480a99b4f40c62af78ca7b3044bad4956119ad1c8e991f66d525536070921cf34eb6ad3ed487f5777773861a4f86b6951d6f6b510b3badab69d9b1cc0ae6b62d53ec854e8cb294fda9d4540e2dc49d1425774c8a249e320d2e01e7b09fa15f5108841710410795b55d99a0d4c65a295957784d99b81f6e9908bd9b4de8bf4b74c5acef30ceb6303d7594b9034b8ca83ffb97dc1c2c10f197fd9c34ccc95f4040adff0123d25f007ab2a6a9eef6adb749f5a8d2a08c941e01537f1570b2d59f9557b0c2131c4349d0cb8c01145e45e48dd0d0e444723a4827831ebd05180a78da5399857f80da220341f1e7bd1eae0c0a9a7ca849f27af44820c638c874a109bdd162540a94ba4bfed813c127932bb9bde3575c2b9511e7a40e6b97a7e9a0ce21598586fc8aedd49033789ed3d33863dd0cf16841563f8a45a5ac90fb6f417a0e67cdd91834c44f2bf978f7bc88586bde355a5075fe3814017688ec6f1d8e3824d15d622b8ef102021f48940d865e423f97678b1e55c766081d70392dbc54a688b994d22d9195eadcf307e8798cd4ac944cdabb66a343d032c883cc49eb59a836564be2955d026b5e4fbbcf5fa0b870648657ae621d7fc5da4e45a438a6c066af0ab4c047719ff8ea83b900bbdd83168292bce2029c2605296791e24a1540992f20aab7d33ecef6217f8c1c335839d5071f32d646634f98ab740bb99b520bf69eca09ab9b70486407eb21c852d3abcd4c272f7c97971673b761988f2bae4d8b0daee9824168d3527a6cdd194c6b4ae14b4500f868d6c324c5d495ede8ef30d25ed42d37275b1701bbd6b7f74924c96559bd64a2afaeabb5abc418a1777658c8257078515a7ce63f6a98578ea89583e02a4cc33e109ce5525af0c9945442a045123ee9811bfa5cb73a564466d81e544adaf5d7a9fa96b0811bc7e59530c9ed340b1967ca5d23c6a4f892e1a88fce7c7f2d7a6b931bfd7b6966529648a37b2c51324a62bb59227853f0137aa7204b1489e51071a57e4795e009cd50c34e2940103fe211eaeda65044e7a3ec6c29f06b0bfd85c4f81ce9983802011835d67f918887bc18ffef3de623d8d80797132e66f14fa78a97def7876886040450536b07f9ac331aab882b9e42f259ec3266f8df6ae35cb8726df04d56ce0f3f169e8b80f05af9804c1bc1cff51b4b87d655438496caed41b0919d9b46a09ecf8fb8c7b59f31cbc8f02c21cfe05ec00594b8381a4ea93d168743c8f6ff533c4710f7dc766ebc4e0979fd974033a86d414a344be72354f48dcad590967e986e09de20c97b17cf8ece02b0b0723ce8331e7cab3d6637e8d5e1a71720e52eee187e492f004e9865505cf92c64ce776cacfd9a8897ceda6b9d6c2d7de0c74d6ae799b830e9081a482dca6bb811ad54ba3e1dcc074b09302e5c8243b498c0a48c7d8e7ab0e79ead8d972e500c7be9ff3e90847ce16bfd8f230d7d5b44f3c28683511076409845eb3d132c7db8dd2fd9c77e5fbe108144bf67864a38519b99b36cd78f1009eed2f783e4c93f8b639af8b2528772b16da3b7361ce6fbc27e668cffb39237497831b94c29253c951b390279bc44857dbf807c6fce5865230f69063fa7be8f7bd282463008b9061a9c659547d0d48d2e7e2fd662db2abcccb61aeda08a1a7add7dc6c84fb7eb0ac15fb2201b73bb2f85ae02138db56239c666a4ebc3e61ba68de0bd108fc1b323554b3cb1895b417a0dc8dac8c639d25d55cd4405bcbb61a9f62b9dca7fee769241d4f180959258a4fb0bf7865961710cda59bcb29afc1a9884815f67b9552ed1d5edb831ceb6a3906c8fc86fe8a41f96519cc4fd85f3fa2844b2fb7972ed707efa4c5e3cd28eb9bb13eb5e090f668308ca61ed9562ab8389856056bba2b4e10410387d7f935a047570b3eb04923bb35b16378823cb47dd952961a94677ac7fe13dba4bde2d6d20e968fbbfda44d1a44139385f35ee8d11e28fcaee51990984c2635d6230b00d8d95e816aad96ea55f8093034fa69ab420939bdc43ac5ab74829f3456e824904ec643b38d4637d6adef4e597153a02ca0e91f7a5699d2aff79c10bd367edb0b0d4a64aa269408e6ce94a0bc82908909d9ad37a2711904190bd9947cba455875d3878a61a61abb79d7f745fd79c6fa405ebbd54908a125c1bde9bb8a2c6782f96ff0cfb37dd8a5ab3e52b3ef97fd68b2b3b9cfd0e0988b8035de6b2beacdc728fcca23d125532669702303af405011084816fc8c70e911e8cfe56bb105bd209afdd2505abd37b1933b8c49832235be358e3054ac981a28c5ebcb6e46b15de8a10497e5adf850464e0a66a87ae415adcce114aead815835a8b2dd180304cf48fe2fa19919314f31d5bf98de7f7a9972a1673e29501a8570777b3b6165276f6bf6f3d8a12fe3b3d913ecaa3fd6b8c6895597eb403ea389a0e8284f3ec1ad7f48080c1583716a64622a08d6f0fc3d5ac217ebc6bb10b781614776a0c95a8100944292296ddce24547e55d7b47e001b86db7cd4af2105bc06d515d461ae80027496ffe71d534a3b81aca38145fa3abb268c8b3a5fa4acaa7117981fadba69802aa518772ca0e0f155967af486a0dfcb0cd8d3697b33ee8daa645e423d8232cb707896cd07933804d6dae1d28b384584ba7beb65717e0b1afedef0cdfa67e949de9ce636554675d9207681f6534779e0fda55c01c2c3a5f223a782bd0d704abf72ede08db81f93b857bd994dee3b8546ce36b93ae80a3ff3c1be46f439272024b1190042b7fcfd524c56e9252b4bcafc9925de123115620783857d894cf6f27557bc810e60b191c9ef48e508b005cfb2137084fae9915d731085244702da700a8ef0146cb85378a9f4532cba5ead42e91d112a17daaa41588733a88e3bc1299fd51733341645308487e9ef32c0fefd5048fb15feaed1636b47c25a565e0254d90d2374fcfac6419747d25c51a8bfe06710f87394faa0113ea651d543f2490b197877c9888d4b075ec1d4f5d542afc46676b877c2246f85e4f6801d72b03d0d86d8d710010398c89951e8cbb6067679972ad70d9ea966a49c4e474d239a2c5e3025692ffa7bd6a57677646111d9b0096ce53a93595e2043ba7df0b6aae5fe5d4afa251cc0b442897271c6ba70023ef38d426f5f98668452c68db4d680a59d84ab74c2ace1e94f463fadedac225e406feb29074f925b54088400249009ac1fffe39c49a50b17b53d7d8183a75ab7d484c4a9d2e02daa77f4328dc7f1d9f6b66913adc869be8586f309ddd1ed5dc1f23a4756b046f760bec9c726f1dd8c1676aa3402ba7fa4ff11db8c1d7cc65676013b359651920720856b7868c398b6926acb4e3a004ced75f50cda36fd238280b95ff93ab6e540ec6908bc107a33fbc57c7b03b2864aafe0cd6d8a099ef4adbd3a21582e895780ada3ec3d09b1da2b03997f23db25c78f64fba7da3aed0ea09a8483724f9d2c0186e390340108e99807baa104556427dcb4233a4d182c3095a99d8acb390c36e73ec97dfca9cc2b02ff298ccf5d1d57f7a1f512f6b3c925fbb9e835bb987d60cd133a85cb67d9c90c9b4f16d7f699fbd18e75f3160c4ef487669b0c401c0f873781a873992db9af04b183e4f0ab9f9b506508b8d115b6047b1bf6dcdaba934fafc93d353cf3afc788444459d748a3cf6b4236c197db577d70438a5643cb2c35073a6ad62e39d6cf672ef6294814c8523930c51dfd2492044cfc251c0be8c80a23fc3016bdad73f7fd704a775fac042db6d886cb7b18225ef785ed33aac6ba1d76e9c4cd5775786a922ae66bda5604d9c603eb53661352ed9be95eb1695a14dd52310e28afde377d72fed11f1ddaa704e65312c0f7ec00b67b56840e7e904d24bc5da027e296521d65ce9a4e28196bceefe85619d2f1436c8f8635727da5808086bbbd96313bb72f626546819ca281b32b68749943b56b7400b5653dd6f69536cc4c089095dc1936093a110812fb9d6646eb89457697d8c5b18a8f6ecd2a6c663570a6213e93666fc0bd868be12e16a80acf8111ffecf73ae2fb8fa7cfd2d580a39e0ad4cbc5d03385894b64957f00b1d66ccd9fadce969e41c39268fcd3be780856ff240e1fcac2a266416eea8955c70ca36cb60235fe87c0548761c2b2ab80323b209276d2758509986b3554d03f3a8f1b6ab3292daf4df558d48eb517a67847b8b17e7ec9ed4928acc61ba42f69d2f82e2146b81689ed5c307e9216628f8aee8963af810f6662b2071b4974af1a4698ad8082bf87d61e7d89c37f023b5ff72edb843a1ebe48de99546177959f1ef68d6e092e99b5c2d5138f5d891348de63ee3fdca882d78a41e0326aaabf0ee821857ebdbceb749e719bfc36933911137c91ee7d270d4604f8ca50ace9bb6e90b64a2f58e84f130d3b47a2cfc2ade93b2d1db6086916e571eacb2faa82fc0b1f7ebe97a3146123701892a8341add5922126c00c298234db82199caf415aeb8a4645c41e1c6e1690e5623bd7ff9eb54f3847ef56ea31fb6414f97db6642bca11afc3359823af2c633f1b4e1407ea01d50ea9daeee400f971af55a7e1fab2c4449491ef461926e5110dbe9c759e1d69780f5af363e01b4cbfc3f621d696c462bd79f8a655b920838d39829d26afdbe8751732f9f90561c389b94b230b814060101f0f366666677b29d2fda1cdae4181f553f83418b1dfc22b3d78caf3360cb8dc57c9f1954cd94bfb396fb8b1a6cfaaaa7d736829ffbea6748069ad79ef1d2cd5d0b5ab4209dc0da577bf21b8ab1430a9736fedf8199f623e791bd7c711c025f4b5f7e7b37fbf27c38055ed9e0086d914db9619bf22a928f64ffaefbb3da1baa720940b889323a3e34e03e08313e9c35ce29c17b87406c1bafb6620c9c96556a0d7b44137f184d814d11561d259edd703e456c69ff348dc7a08dc95fb168508a023cf287d979ac3c7a41820e2854cc75e73dc90868af6e73f1edefd0472caa963637629145e6a2e026f62032dd7f46ee9b5bab106c78069b99fed6057a4e1f89d3e274fea483f90d4297c1fa1b74e50b935937b48949a6ae488158e7c41cfaa64db5517aa3f4fb82d8f9391d9f7c26db4d6ce8d7da91c28c346b6bb46c3ff1361c8527f9da49dd18fd164f2cbe0960a4268d3c1b1c176c5ebc65997e0e5c41ebef690014516216e6d3dbae231db0b4284cbd70f59ade44da4c330f77533a65446c2fa3421c917c537914807ad97bf0d2407413c72a6733e4b5024d3616cc92621701b16ab647bcf860ac1e5112449cc347db4650eb71a64180fb8e944663e7e155ffc325ab38e18b8b5ec12a16da61693be9736c01981099f707a20011165fe3bf89e554dfb5e14af5956453d881e11bb8841aeb930f3f8a4d40ce4250ea7e787fd301f5ddfb2def4617a75c8e9d5ddac1b8697a19e4f414093220b50d920be961331d293e1df98144ee6f37411362507667035cf358b7837b43f82c87645501f33dc53195a7bcec4a975d726de0f94dbb1df423a67500e6bcf7d7958aea216784b9beda0f2a1f36a37a39a2565aab55dedf46cd8539c28c817d9bffff3a3e7030b4480a96687fabf25ca966fd18a40edcf7e2cc40b37e89ac4e4e65738c352efa0038d889ced5f0c23c146ac677df3359325ae4583d35305d321b78f954856cfef154998c9f79d5f019c2a1daaf161e91fc01a391f9591da98b5dcd2b22283aa55e25bdf9d536d44fba5c8afee63756c642c91552076d63cedbdd71f0db31847e09b7c218cec0a0436f8dfd302e7e0c1356e0ed07c4ae7397a1ad583d62090bf64286fb2bf6f50a069ece2c3c5d50aad7eb755c3e22cc9c2f8b5a39dbdc8772eb7c735b7269d9e02030ac2c4783037d6511c5557094ff4a04b3a6e8df3f7eeba655b3dc36b26616e3d79d5b87395feb6158341b1d53fd8b6e40a7161b9aa0023fae4ff579184385166dc2783aa9e3142eb9989216462fcf800b97072cf1eff11441acb7c9669a22e491bd4fec0c3618e76ab8120fbb1ba400ad8410fd8f8662846ce65ea72f5b4acf055795cd24ce84d1660d4850b715223e03e31275be352157fb9facd41d370bd78aa0c9336756d371ec122334ad8017f891d22f235c5f2c397836e077afe2f464a897bcc5b5aa580acea7ddccee52391766c882c26c6b16b7fae86b398dcf6f4c3268fe50efab16a915259dce2c592da934b0600bc3212e098cb45285552967cb3154a5da352d56195cbbe78e72765d732be6e185980949edd73626d94e1b2fa8b58852a63e5a3437b1bef58ca869516c7efee5807482b3e707ac65a1459f941b33669f1a9dc9b5d3ba7e27bb176373fd0ca1d8f6a1ecd5f0db991b59f1142387ef42bd516cdeb1b08158ecad0bed4a93d29677512a7e6268f11cadeb7383a1ce97f4b4db08461400f11969d812552e0e6b7a6913d247889a8f529d1a3b105a416c16a45c4b6914f6c09086076e610c21a3c501d7a87755a894978f0b7878ef51c2fa637fb8dc39ba03c8cdb2d9f191e2686758e70160594c24df3200f6519702ea001466ea490a24bddaeea00b98605f6cc5b6d4b03c243f34c0da9b34660a84f3406798ed1780d6a8a91db875afec1d95e716ec4fedf30414a01dcdfc4d81d3e333047850d117165343c6b14a1b8c57cc0da1f1e283c6d3a65ba1474e35b67fe77be44da2ea5a887367307a93ec7f4638d94b40b7fb710c4106ba67c20f1c56144cb456d4eb61508fb4dacab14ca4e6d5e3dd19db8a3479ac8036ae31c3c2806ed75f271a2bb20eb14844ea00e0d7c063a49dcfd665a3a30c91e35e08e429ccc81c884e4368646d992a96a7a8c22d53143bfc95797e2609e1d3524fc1273ea5057c6dc29dbb04d70dedd40de4022b8e9805416bdacf2397286b2ebc23043e18ec00e2f4b61becca78e1c777c3f0287d19d1964a66a76aed6ce1c70426c72c971f8176136c6911c23c56038ac4e2106e82d5d3c612dfe2c8985fca69342d5929be935d99d14455af272d4b6cff969a6b0e9d71fa1e1294ea29fe76e2d64a1aa79787f1274ffbcb96a74549279126e73bd5aadca333c77e88c8334a4a859ce6d31392c7405a485b814ff8a0fb3ab246bfb5e1ca92b623a9ce7a4976e2ad844bdca127a2381a5fbf6fe04062e138a128df21d88a9895b02a38a04d8ecdaa418a7afa60428711c129eb101dfd9af90439a76283bc80f6e95cb30b16126884e1c872d1933c5bffbd35dbe0d233012ebfb90272aacd4b0c296c07b410a7704861c1dd5b7ed4343879dfbc764621d8477e7923086c875cb5b520d9067ead846f7656e6c163d4958b6aba958aad06e91f597b97e950d1374cc9d23b5d96b7da0dfe3c0cd6bdb7409461677491e8881533fa52766ea064945844fbfd5827198eca394ea1c1f54dbdb4d796cfff03a4a67163958a302c0a20930395db8736a3a81970242154fcb0b52e22370f0e423a3c30c0846b0500dd828031b1686eb4beaf14f0697da6a1350be9837d1ab25481abcdfb1d632f2197baa8c296c6b490fb31b9bc46d013c166f73e239ee217537d5488fae3ab34322c2101c280241dc900b73148e8143fcdb83d36789ed9a9534d08c63c87a649c7b53a269d6afa3390fe3c43717b9c29b523d2d2b253d3c3657a651fa30a1f4f32d21a789c44be4c3253635657fbcf5a869b73eb06ef4f3ae793738422ed4881f97448375544752e620c540c15528bfd415b9688a62783b4de7475f25e89c8e6ac725854f8c203c6032b6f3e8ad4589cfb955313ca8cd0afcfca8720200aad256a08ddf49cf40ff9877b411b630f7f110f1ebf4b94fd9d4eec20bc8889e221e076e282c72657d29539ace30dc500e79854402e81afa4cb6ba379b7ebeff305da991cb5c71bda08352e7938f5b9801b8158bd44e0c0a08b89800e42e1d88a7fe0c01f17f568940372e15d8047686d9d02f4f8f7e59bf91594845ff3662aab1d919a63b0c8a12b1cc193e2500447227ba83caa4f032219908622b2ab2f4c38dae4994e0222bb092b57ff1d379d1eb6f05b85b9f164165e7ed06d8e683af7f4c36cdd3dfa7901812b2e440e8684120764775ec5f08439d67a8012d5ca90b73a587958c050f70463280c60c831417c2938661a3d290e7b68e6cfab58c340ff1fd03db67e7c2a2852e20147a5c01c63c8c7c754e77f39e22aa4eac02382d74be665c4e0162e4e09f6ecf8755b38cf712d2fe106689105e143edcceceb246631b56db7d9e14121ff38a44a9d6b436772c0afc3656535a0ed7bd01317d9591cc91dcc31e0a0d9e59a271f41c84630dbd07c57d4dcd5e9b372a8277e9961e1b67c152fff927e00b7bb0742c46b34251de0baa6291d7b131f2493d1d1c77c9eadd0aa6b805ae6c5936cdafa5a9adc1e89e5cd1a0912646347ddc6172b7900a5a0beac867e5fb4821b835f2f532eec57864db7003031c6f7a938d871ad315518cfe7e91d0246cf7609d761466e86dfd1bf99898246b41fc9bc7e0da18191134a931264e3d7d2ca877811ceede103816bf1cc7e9db3dc18d432f578621eddcb230842fc586a2817da55486faff3e9efdffa6097bbed915c59403a0d4d3a9698c41db863a50339b8659d58dcdc9a51cca60806483329c17f87cd505fb3ebb81bd37efde77e070efd4621030b1c39cca017fcd680be066aca7959e695a66d34d8cce3122aec842f8d3bfa91f7951c1b06d6438494448909fb3a9f78bd346e1798ba3c4071eacdf75e5751a10c4cbdd1f69491391bf2dc7fddc8f63531127603c4f39be98030cd6b6c194f8741e0c598f61f6da80041f0f2cec05ca3c021da7df6b3131544755ecf16bf37c6e90fd0f7b39c9b91d1a224fea30512e42441d148a255c6707520e8ff34199e4d4e8ab8c5ea9f0c1894daeac79838dfedd800d63a5ddabde4ba758a2a4add1bedd90cab706c614f04d6a070e5ba7abaa505593d59f0d06104f973363f2f299889aafaf4a0a04cdeb9a2f3063808edfc4e9d9132bb462d2a3f4f6995f84db510f490d57f12391e0336ac35dc0abe91b916e285b97d6c89f0e0f03e7ace8304c300376a9f90f81600fa81b70dfe621bd880a4aeb1ad185326676b6c1dd87e5b0f2e9d67a322be125e15403f4dd0d3d9b83ff6c4a56f7725c07022bb77abdb8c950bcf9de525beee7d86d840d9eca806b946327c833e392c5a2aeac27079e871bbac2c8e0ca12a16c0c4d17c6ee46857606a6ea64d8393d55333320f1c03ed9b7fabd0e2042261c0b12fde82b90428a8a0442a048249781cde14a45e85a4bb1089581e78a9ef49d317c14fa6288a584f6460f0f7e543f7b5eb27513710762d4aa56624cef183c767498a648360b8331875ac42a68ddd2825f04d4234c8b3797da4662d6bdefde2c8836c1ceaabf640e3f240ea0ad4e9006401c96ead707da7142ef385cb6f18a2e563372ca7238a98dfcfadae8c57fe0a7ea2823782a4361dc5b26a3b9ec93fa2f9d61fe04bc0deceee58fcd6c169e1b3563597c080ef8b4843db734d30a28550a5708fe22ee860d74b1396fb67d2a34074be7dbd378d6f6eae894275f5c9af880672dcbbc076c22bfcc59011a4574c1af6cf9262e0e1d35b443b531ad44c445ab2220dd7a5db03f2104d15799c011939e5bb2691d238f68d59508ced08d11b37b0d9805e929f9af769bec76ea9c853d9d791ab2fffb41b2b03a6a8e2690283127f05044f154375cb23ba0a6b2</script></div><script src="/lib/blog-encrypt.js"></script><link href="/css/blog-encrypt.css" rel="stylesheet" type="text/css"></article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">文章作者: </span><span class="post-copyright-info"><a href="mailto:undefined">Kylin</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">文章链接: </span><span class="post-copyright-info"><a href="https://www.codekylin.cn/49809.html">https://www.codekylin.cn/49809.html</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">版权声明: </span><span class="post-copyright-info">本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来自 <a href="https://www.codekylin.cn" target="_blank">Kylin</a>！</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/Java/">Java</a><a class="post-meta__tags" href="/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a><a class="post-meta__tags" href="/tags/offer/">offer</a></div><div class="post_share"><div class="social-share" data-image="https://qiniu.codekylin.cn/img/20200418115059.jpg" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/social-share.js/dist/js/social-share.min.js" defer></script></div></div><div class="post-reward"><div class="reward-button button--animated"><i class="fas fa-qrcode"></i> 打赏</div><div class="reward-main"><ul class="reward-all"><li class="reward-item"><a href="https://qiniu.codekylin.cn/img/20200807181442.jpg" target="_blank"><img class="post-qr-code-img" data-lazy-src="https://qiniu.codekylin.cn/img/20200807181442.jpg" alt="微信"/></a><div class="post-qr-code-desc">微信</div></li><li class="reward-item"><a href="https://qiniu.codekylin.cn/img/20200807181505.jpg" target="_blank"><img class="post-qr-code-img" data-lazy-src="https://qiniu.codekylin.cn/img/20200807181505.jpg" alt="支付寶"/></a><div class="post-qr-code-desc">支付寶</div></li></ul></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/8582.html"><img class="prev-cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/code3.jpg" onerror="onerror=null;src='/img/404.jpg'" alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">TCP网络编程</div></div></a></div><div class="next-post pull-right"><a href="/39047.html"><img class="next-cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/博客封面1.jpg" onerror="onerror=null;src='/img/404.jpg'" alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">MyCat分库分表</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span> 相关推荐</span></div><div class="relatedPosts-list"><div><a href="/41769.html" title="Java之BIO编程"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/荒鲸.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-11-01</div><div class="title">Java之BIO编程</div></div></a></div><div><a href="/19610.html" title="NIO与零拷贝"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/img/20200708172722.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-11-08</div><div class="title">NIO与零拷贝</div></div></a></div><div><a href="/8582.html" title="TCP网络编程"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/code3.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-10-31</div><div class="title">TCP网络编程</div></div></a></div><div><a href="/58945.html" title="UDP网络编程"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/wallhaven-j5jyjp.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-10-31</div><div class="title">UDP网络编程</div></div></a></div><div><a href="/26235.html" title="URL网络编程"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/wallhaven-2k8wlg.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-10-31</div><div class="title">URL网络编程</div></div></a></div><div><a href="/41853.html" title="Java之NIO编程"><img class="cover" data-lazy-src="https://qiniu.codekylin.cn/github/img/img/deepin-3.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-11-01</div><div class="title">Java之NIO编程</div></div></a></div></div></div><hr/><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="fas fa-comments fa-fw"></i><span> 评论</span></div></div><div class="comment-wrap"><div><div class="vcomment" id="vcomment"></div></div></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="card-info-avatar is-center"><img class="avatar-img" data-lazy-src="https://qiniu.codekylin.cn/img/20200807181526.jpg" onerror="this.onerror=null;this.src='https://qiniu.codekylin.cn/github/img/friend_404.gif'" alt="avatar"/><div class="author-info__name">Kylin</div><div class="author-info__description">学习不易，努力努力~</div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">362</div></a></div><div class="card-info-data-item is-center"><a href="/tags/"><div class="headline">标签</div><div class="length-num">427</div></a></div><div class="card-info-data-item is-center"><a href="/categories/"><div class="headline">分类</div><div class="length-num">101</div></a></div></div><a class="button--animated" id="card-info-btn"><i class="fas fa-bookmark"></i><span>加入书签</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/kylincw" target="_blank" title="Github"><i class="iconfont icon-github"></i></a><a class="social-icon" href="tencent://message/?Menu=yes&amp;uin=171346168&amp;Service=300&amp;sigT=45a1e5847943b64c6ff3990f8a9e644d2b31356cb0b4ac6b24663a3c8dd0f8aa12a595b1714f9d45" target="_blank" title="qq"><i class="iconfont icon-qq"></i></a><a class="social-icon" href="https://space.bilibili.com/53836035" target="_blank" title="BiliBili"><i class="iconfont icon-bilibili-line"></i></a><a class="social-icon" href="mailto:zhang171346168@qq.com" target="_blank" title="Email"><i class="iconfont icon-email1"></i></a><a class="social-icon" href="/atom.xml" target="_blank" title="RSS"><i class="iconfont icon-rss"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>公告</span></div><div class="announcement_content">学习不易，努力努力！</div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span></div><div class="toc-content toc-div-class" style="display:none"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%A6%82%E8%BF%B0"><span class="toc-number">1.</span> <span class="toc-text">概述</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80"><span class="toc-number">2.</span> <span class="toc-text">网络基础</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E8%A6%81%E7%B4%A0%E6%A6%82%E8%BF%B0"><span class="toc-number">3.</span> <span class="toc-text">网络通信要素概述</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E5%8F%B7"><span class="toc-number">3.1.</span> <span class="toc-text">IP和端口号</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE"><span class="toc-number">3.2.</span> <span class="toc-text">网络协议</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#TCP-IP%E5%8D%8F%E8%AE%AE%E7%B0%87"><span class="toc-number">3.2.1.</span> <span class="toc-text">TCP&#x2F;IP协议簇</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#TCP%E5%92%8CUDP"><span class="toc-number">3.2.2.</span> <span class="toc-text">TCP和UDP</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#InetAdress%E7%B1%BB"><span class="toc-number">4.</span> <span class="toc-text">InetAdress类</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#Socket%E7%B1%BB"><span class="toc-number">5.</span> <span class="toc-text">Socket类</span></a></li></ol></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/56352.html" title="be动词"><img data-lazy-src="https://qiniu.codekylin.cn/github/img/img/博客封面10.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="be动词"/></a><div class="content"><a class="title" href="/56352.html" title="be动词">be动词</a><time datetime="2022-07-12T11:47:29.800Z" title="更新于 2022-07-12 19:47:29">2022-07-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/36436.html" title="JVM堆内存"><img data-lazy-src="https://qiniu.codekylin.cn/img/20200418115059.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="JVM堆内存"/></a><div class="content"><a class="title" href="/36436.html" title="JVM堆内存">JVM堆内存</a><time datetime="2022-07-12T11:47:29.800Z" title="更新于 2022-07-12 19:47:29">2022-07-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/44292.html" title="Java多线程详解"><img data-lazy-src="https://qiniu.codekylin.cn/github/img/img/wallhaven-eorjzk.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Java多线程详解"/></a><div class="content"><a class="title" href="/44292.html" title="Java多线程详解">Java多线程详解</a><time datetime="2022-07-12T11:47:29.800Z" title="更新于 2022-07-12 19:47:29">2022-07-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/40200.html" title="谷粒商城记录"><img data-lazy-src="https://qiniu.codekylin.cn/github/img/img/wallhaven-6qvvrx.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="谷粒商城记录"/></a><div class="content"><a class="title" href="/40200.html" title="谷粒商城记录">谷粒商城记录</a><time datetime="2022-07-12T11:47:29.800Z" title="更新于 2022-07-12 19:47:29">2022-07-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/27082.html" title="Spring学习-3"><img data-lazy-src="https://qiniu.codekylin.cn/github/img/img/wallhaven-4x28xo.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Spring学习-3"/></a><div class="content"><a class="title" href="/27082.html" title="Spring学习-3">Spring学习-3</a><time datetime="2022-07-12T11:47:29.799Z" title="更新于 2022-07-12 19:47:29">2022-07-12</time></div></div></div></div></div></div></main><footer id="footer" style="background-image: url('https://qiniu.codekylin.cn/img/20200418115059.jpg')"><div id="footer-wrap"><div class="copyright">&copy;2019 - 2022 By Kylin</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text"><a target="_blank" rel="noopener" href="https://beian.miit.gov.cn/"><img class="icp-icon" src="https://img.alicdn.com/tfs/TB1..50QpXXXXX7XpXXXXXXXXXX-40-40.png"><span>湘ICP备2022005420号-1</span></a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="font-plus" type="button" title="放大字体"><i class="fas fa-plus"></i></button><button id="font-minus" type="button" title="缩小字体"><i class="fas fa-minus"></i></button><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><a id="to_comment" href="#post-comment" title="直达评论"><i class="fas fa-comments"></i></a><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><div class="search-dialog__title" id="local-search-title">本地搜索</div><div id="local-input-panel"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div></div><hr/><div id="local-search-results"></div><span class="search-close-button"><i class="fas fa-times"></i></span></div><div id="search-mask"></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/instant.page/instantpage.min.js" type="module"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script><script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script><script src="/js/search/local-search.js"></script><div class="js-pjax"><script>function loadValine () {
  function initValine () {
    const valine = new Valine(Object.assign({
      el: '#vcomment',
      appId: 'ClIyIUhj1ue2rcRTsApYCR50-gzGzoHsz',
      appKey: 'ATug9IScYQBHILhKWEqBHYxM',
      placeholder: '昵称填入QQ号能获取到QQ头像哦~请输入正确的邮箱地址，你将会快速收到我的回复并且通过邮件通知你！~',
      avatar: 'robohash',
      meta: 'nick,mail,link'.split(','),
      pageSize: '10',
      lang: 'zh-cn',
      recordIP: false,
      serverURLs: 'https://cliyiuhj.lc-cn-n1-shared.com',
      emojiCDN: '',
      emojiMaps: "",
      enableQQ: true,
      path: window.location.pathname,
      requiredFields: ["nick,mail"],
      visitor: false
    }, null))
  }

  if (typeof Valine === 'function') initValine() 
  else getScript('https://cdn.jsdelivr.net/npm/valine/dist/Valine.min.js').then(initValine)
}

if ('Valine' === 'Valine' || !true) {
  if (true) btf.loadComment(document.getElementById('vcomment'),loadValine)
  else setTimeout(loadValine, 0)
} else {
  function loadOtherComment () {
    loadValine()
  }
}</script></div><script defer="defer" id="ribbon" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="true"></script><script defer="defer" id="fluttering_ribbon" mobile="false" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-fluttering-ribbon.min.js"></script></div></body></html>